Virtual machine platforms enable the simultaneous execution of multiple guest operating systems on a physical machine by running each operating system within its own virtual machine. One exemplary service that can be offered in a virtual machine is a virtual desktop session. A virtual desktop session is essentially a personal computer environment run within a virtual machine that has its user interface sent to a remote computer. This architecture is similar to a remote desktop environment, however instead of having multiple users simultaneously connect to a server class operating system, in a virtual desktop session each user has access to their own commodity operating system executing in a virtual machine.
Modern operating systems render three-dimensional (3D) graphical user interfaces for 3D applications/videogames and its operating system user interface. Users enjoy the experience of interacting with a 3D environment and it would be desirable to be able to stream 3D graphics to a client in a virtual desktop session; however, enabling streaming 3D graphics is difficult for numerous reasons. For example, the act of streaming 3D graphics requires bandwidth and/or compression. Furthermore, the virtual desktop server would need to include 3D graphics processing units (GPUs), which are capable of performing 3D functions. 3D graphics processing is resource intensive and the GPUs are typically only able to render a couple 3D graphical user interface at a time. These GPUs can quickly become overloaded if they have to render too many graphical user interfaces. Unfortunately, in a virtual desktop deployment, the GPUs may have to simultaneously render a large number of 3D graphical user interfaces. This can cause one or more operations to timeout, which can cause the graphics driver to reset the GPU, which causes the 3D applications to terminate. Accordingly, techniques for recovering from a reset are desirable.